REM >Director:Menus.Modes.ByColour
ON ERROR PRINT REPORT$;" at line ";ERL:END
SYS "OS_GetEnv" TO in$
log2bpp=EVAL(FNarg(in$,"-lbpp","-1"))
block_size = 1024
DIM block block_size
SYS "OS_ScreenMode",2 TO ,,modes
modes=-modes

menu=FNswi_number("Director_Menu")
endmenu=FNswi_number("Director_EndMenu")
option=FNswi_number("Director_Option")
command=FNswi_number("Director_Command")
dash=FNswi_number("Director_Dash")


DIM bpp$(5)
bpp$()="2","4","16","256","32T","16M"
menu$=bpp$(log2bpp)+" Colours"
index=0
SYS "OS_CLI","Menu """+menu$+""" Modelist -temp"

lastx=0:lasty=0
REPEAT
 SYS "OS_ScreenMode",2,,index,,,,block,block_size TO ,ok,,,,,end
 a=block
 WHILE a<>end
  x=a!8
  y=a!12
  bpp=a!16
  fr=a!20
  IF log2bpp=a!16 AND a?24<>0 THEN
   IF x<>lastx OR y<>lasty THEN
    SYS option,""""+FNc(x)+" x "+FNc(y)+""""
    SYS command,"WimpMode X"+STR$(x)+" Y"+STR$(y)+" C"+bpp$(bpp)
   ENDIF
   lastx=x
   lasty=y
  ENDIF
  a+=!a
  index+=1
 ENDWHILE
UNTIL ok<>0
SYS endmenu
REM IF index<>modes ERROR 1,"Peculiar number of modes"
*Set Director$Menu Modelist
END

DEF FNarg(str$,arg$,def$)
LOCAL i,j
i=INSTR(str$,arg$)
IF i=0 THEN =def$
i+=LEN arg$+1
j=INSTR(str$+" <"," ",i)
=MID$(str$,i,j-i)

DEF FNswi_number(swi$)
SYS "OS_SWINumberFromString",,swi$ TO swi%
=swi%

DEF FNc(n)
=RIGHT$("    "+STR$ n,4)
